home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 226_01 / workup4.c < prev   
Text File  |  1987-12-05  |  16KB  |  468 lines

  1.    /*  HEADER:CUG 226;
  2.        TITLE:"ART-CEE";
  3.        VERSION:1.4;
  4.        DESCRIPTION:"Small artificial intelligence inference engine.
  5.  
  6.             ART-CEE is a rule-based general purpose driver capable of working
  7.             with heirarchical and/or propositional information.";
  8.        KEYWORDS:artificial intelligence, inference engines, database;
  9.        SYSTEM:MS-DOS;
  10.        FILENAME:WORKUP4.C;
  11.        SEE-ALSO:WORKUP0.C, WORKUP2.C, WORKUP3.C, MANUAL.TXT, WORKUP0.H,
  12.             WORKUP1.H, HELP1.AIH, HELP2.AIH, HELP3.AIH, HELP4.AIH, ART-CEE.COM;
  13.        AUTHOR:Dan Cheatham;
  14.        COMPILER:MIX-C;
  15.    */
  16.  
  17.  
  18.          /*  art-cee  artificial intelligence inference engine    */
  19.          /*                                                       */
  20.          /*  file:  workup1.C    --  external data definitions    */
  21.          /*                          main function                */
  22.          /*                          initial input and parse      */
  23.          /*                          help                         */
  24.          /*                                                       */
  25. #include "stdio"
  26. #include "workup0.h"
  27.     float    dfwd, drev, ff1, ft[MAX][MAX];
  28.     char     indff[80], subjs[MAX][77], currfile[32], menu_sw,
  29.              oride_sw, filebuf[81];
  30.     int      x1, x2, filestat, srchdpth, assumpno;
  31.  
  32.  
  33. main()
  34.     {  wakeup(); menu_sw = 'Y'; oride_sw = 'Y'; assumpno = 0;
  35.        x1 = 50; filestat = 0; dfwd = 100.0 ; drev = 0.0; srchdpth = 3;
  36.        strcpy(currfile,"ART-CEE.DAT");
  37.          while (toupper(indff[0]) != 'X')
  38.              { mainin();
  39.                if (x1 > 2 && x2 != 0)
  40.                   exec_string();
  41.                else
  42.                   { if (x1 == 1)
  43.                    commands();
  44.                     else
  45.                        { printf("\nInvalid entry.");
  46.                          marktime(); } } }
  47.  
  48.        printf("\nSave database (Y/N)? ");
  49.               gets(indff);
  50.               if (toupper(indff[0]) == 'Y')
  51.                   savedata(0,MAX);
  52. }
  53.   
  54. marktime()
  55.    { char xx; printf("\nPress return to proceed."); xx = getchar(); }
  56.  
  57.  
  58. wakeup()
  59.    { system("cls");
  60.       printf("\n      AAAAAA   RRRRRRRR  TTTTTTTT      CCCCCCCC  EEEEEEEE  EEEEEEEE");
  61.       printf("\n     AA    AA  RR    RR     TT        CC         EE        EE");
  62.       printf("\n     AA    AA  RR    RR     TT        CC         EE        EE");
  63.       printf("\n     AAAAAAAA  RRRRRRRR     TT  ++++  CC         EEEEEE    EEEEEE");
  64.       printf("\n     AA    AA  RR  RR       TT  ++++  CC         EE        EE");
  65.       printf("\n     AA    AA  RR   RR      TT        CC         EE        EE");
  66.       printf("\n     AA    AA  RR    RR     TT         CCCCCCCC  EEEEEEEE  EEEEEEEE\n\n");
  67.       printf("\n                            By Dan Cheatham\n\n\n\n\n\n\n");
  68.       initialize();
  69. }
  70.   
  71. showmenu()
  72.       {  system("cls");
  73.          printf("COMMANDS:                          SETTABLE DEFAULTS:\n");
  74.          printf("   B batch group     L load          Forward        %f\n",dfwd);
  75.          printf("   C change subject  P print         Reverse        %f\n",drev);
  76.          printf("   D drop rule       S save          Assumptions    %d\n",assumpno);
  77.          printf("   G manual group    T think         thinK depth    %d\n",srchdpth);
  78.          printf("   H help            V view          allow Override %c\n",oride_sw);
  79.          printf("   I initialize      X exit          show Menu      %c\n",menu_sw);
  80.          printf("RULES:\n");
  81.          printf("   IF <subject> THEN <predicate>\n");
  82.          printf("QUERIES:\n");
  83.          printf("   WHO <subject> <?>\n");
  84.          printf("   WHAT <subject> <?>\n");
  85.          printf("   DESCRIBE <subject>\n");
  86.          printf("   IF <subject> THEN <predicate> ?\n\n");
  87. }
  88.  
  89. commands()
  90.      { switch(toupper(indff[0]))
  91.         { case 'A':  setassump()                 ; break;
  92.           case 'B':  filegroup()                 ; break;
  93.           case 'C':  chgsubj()                   ; break;
  94.           case 'D':  droprule()                  ; break;
  95.           case 'F':  setfwd()                    ; break;
  96.           case 'G':  manugroup()                 ; break;
  97.           case 'H':  help()                      ; break;
  98.           case 'K':  setdepth()                  ; break;
  99.           case 'I':  initialize()                ; break;
  100.           case 'L':  loaddata()                  ; break;
  101.           case 'M':  menu_sw  = toggle(menu_sw)  ; break;
  102.           case 'O':  oride_sw = toggle(oride_sw) ; break;
  103.           case 'P':  hardcopy()                  ; break;
  104.           case 'R':  setrev()                    ; break;
  105.           case 'S':  presave()                   ; break;
  106.           case 'T':  think()                     ; break;
  107.           case 'V':  view()                      ;
  108.           }
  109. }
  110.  
  111. setassump()
  112.    { int qa1, qa2; char dumment[2];
  113.      qa1 = MAX - 3;
  114.      printf("\nWhat is the maximum number of assumptions to allow?");
  115.      printf("\nAbsolute maximum is %d, absolute minimum is zero.",qa1);
  116.      printf("\nYour choice: ");
  117.      scanf("%d",&qa2); gets(dumment);
  118.  
  119.      if (qa2 < 0)
  120.         assumpno = 0;
  121.      else
  122.         { if (qa2 > qa1)
  123.             assumpno = qa1;
  124.           else
  125.             assumpno = qa2; }
  126. }
  127.  
  128. setdepth()
  129.    { int sd1, sd2; char dumment[2];
  130.      sd1 = MAX - 1;
  131.      printf("\nHow many levels shall be examined in thinking?");
  132.      printf("\nAbsolute maximum is %d, absolute minimum is 3.",sd1);
  133.      printf("\nYour choice: ");
  134.      scanf("%d",&sd2); gets(dumment);
  135.      if (sd2 < 3)
  136.         srchdpth = 3;
  137.      else
  138.         { if (sd2 > sd1)
  139.             srchdpth = sd1;
  140.           else
  141.             srchdpth = sd2;}
  142. }
  143.  
  144. initialize()
  145.        { int sx1; char empstr[] = "@@@@@"; 
  146.          printf("\n\nInitializing storage.");
  147.          for (sx1 = 0; sx1 < MAX; sx1++)
  148.           { blank1pt(sx1);
  149.             strcpy(subjs[sx1],empstr); }
  150. }
  151.  
  152. setfwd()
  153.   { ff1 = dfwd;
  154.     dflt("forward");
  155.     dfwd = ff1;
  156. }
  157.  
  158. setrev()
  159.   { ff1 = drev;
  160.     dflt("reverse");
  161.     drev = ff1;
  162. }
  163.  
  164. toggle(cv)
  165.    char *cv;
  166.  { if (cv == 'Y')
  167.       return('N');
  168.    else
  169.       return('Y');
  170. }
  171.  
  172. dflt(st1)
  173.       char *st1[ ];
  174.    {  float ff2; char tx;
  175.       printf("\n\nEnter new default %s percentage",st1);
  176.       printf("\n   100 = certainty, 0 = never, must be at least zero.  ");
  177.       scanf("%f",&ff2); tx = getchar();
  178.       if (ff2 < 0 || ff2 > 100)
  179.        { printf("\nInvalid entry."); marktime(); }
  180.       else
  181.           ff1 = ff2;
  182. }
  183.  
  184. disphelp(tt)
  185.      char *tt[ ];
  186.    { int      wk2; char tc; FILE *infile;
  187.      infile = NULL;
  188.      tc = "C";
  189.      while (infile == NULL && tc != 'A' && tc != 'a')
  190.        { if (filestat == 0)
  191.           { printf("\n\n Insert disk containing ART-CEE help files.");
  192.             printf("\n Press 'A' to abort, any other key to proceed.");
  193.             tc = getchar(); }
  194.           if (toupper(tc)  != 'A')
  195.             { infile = fopen(tt,"r");
  196.               filestat  = infile; } }
  197.      if (toupper(tc) != 'A' && infile != NULL);
  198.        { wk2 = 0; system("cls");
  199.          while (fgets(filebuf ,81,infile) != NULL)
  200.            { if (wk2 > 20)
  201.                { marktime(); system("cls"); wk2 = 0; }
  202.              printf("%s",filebuf );
  203.              wk2++; }
  204.              fclose(infile); }
  205. }
  206.  
  207. help()
  208.    { char tcc[2];
  209.      disphelp("help1.aih");
  210.      gets(tcc);
  211.      while(tcc [0] == 'R' || tcc [0] == 'C' || tcc [0] == 'r' ||
  212.            tcc [0] == 'c' || tcc [0] == 'Q' || tcc [0] == 'q')
  213.        { if (tcc [0] == 'R' || tcc [0] == 'r')
  214.               disphelp("help2.aih");
  215.          else
  216.            { if (tcc[0] == 'C' || tcc [0] == 'c')
  217.                 disphelp("help4.aih");
  218.              else
  219.                 disphelp("help3.aih"); }
  220.          printf("\n\n Press 'R' for rules, 'Q' for queries, 'C' for commands,");
  221.          printf("\n anything else to return to main input. ");
  222.          gets(tcc);}
  223. }
  224.  
  225. failfile()
  226.    { printf("\n\nFile procedure has failed."); marktime();
  227. }
  228.  
  229. exec_string()
  230.     {  char pred[77]; int rs1, rs2, rs3, rs4, findsub();
  231.        rs4 = 1;
  232.